<?php
/**
 * Nucleo encargado de gestionar todas las peticiones del sistema
 *
 */
class Nucleo{
	/**
	 * Contiene la conexion a la base de datos
	 *
	 */
	public $conexion;
	/**
	 * Contiene la referencia a la clase Smarty
	 *
	 * @var Smarty
	 */
	public $smarty;
	/**
	 * Contiene los parametros del sitio
	 *
	 * @var Array
	 */
	public $parametros;
	/**
	 * Contiene los parametros totales del sitio
	 *
	 * @var Array
	 */
	public $parametrostotal;

	/**
	 * Constructor del Nucleo
	 *
	 * @param Conexion $conexion
	 * @param Smarty $smarty
	 * @param Array $parametros
	 */
	public function __construct($conexion="", $smarty="", $parametros=""){

		$this->conexion=$conexion;
		$this->smarty=$smarty;
		$this->parametros=$parametros[0];
		$this->parametrostotal=$parametros;

	}

	/**
	 * ejecuta una accion de un modulo
	 *
	 * @param String $modulo
	 * @param String $accion
	 */
	public function ejecutarModulo($modulo, $accion){
		$modulox=strtolower($modulo);
		if(file_exists("modulos/$modulox/$modulox.class.php")){
			require_once("modulos/$modulox/$modulox.class.php");
			$this->smarty->assign("modulo", $modulox);
			$modobj=new $modulo($this);
			if(method_exists($modobj, $accion)){
				$modobj->$accion();
			}else{
				$this->smarty->assign("ptl", "");
				$this->smarty->assign("error", "El metodo <b>$accion</b> no ha sido definido");
			}
		}else{
			$this->smarty->assign("ptl", "");
			$this->smarty->assign("error", "El modulo <b>$modulo</b> no ha sido definido");
		}
		$plantilla=$this->smarty->template_dir . "" . $this->smarty->get_template_vars("modulo") ."/".  $this->smarty->get_template_vars("ptl");
		if(!file_exists($plantilla)){
			$this->smarty->assign("ptl", "");
			$this->smarty->assign("error", "La plantilla no ha sido definida");
		}
	}

	/**
	 * Ejecuta una accion de un modulo que devuelve una respuesta
	 *
	 * @param String $modulo
	 * @param String $accion
	 * @return Object
	 */
	public function ejecutarModuloGetResp($modulo, $accion){
		$modulox=strtolower($modulo);
		if(file_exists("modulos/$modulox/$modulox.class.php")){
			require_once("modulos/$modulox/$modulox.class.php");
			$modobj=new $modulo($this);
			return $modobj->$accion();
		}
		return null;
	}

}
?>